package com.example.demo.mythread;

import java.util.Stack;

public class WriteStack implements Runnable{
    int count = 0;
//    堆栈
    Stack<Integer> myStack;
    public WriteStack(Stack<Integer> myStack){
        this.myStack = myStack;
    }

    @Override
    public void run() {
        System.out.println("子线程"+Thread.currentThread().getName()+"开始写入数据");
        while (count<5){
//          Java中的关键字，是一个同步锁，修饰以下几种：
//            1、代码块
//            2、修饰方法
//            3、修改一个静态方法
//            4、修改一个类
            synchronized (myStack){
                if(count==3){
                    try {
//                        此时线程被放置在等待线程池中
                        myStack.wait();
                    }catch (InterruptedException e){
                        System.out.println(e.getMessage());
                    }
                }
                System.out.println("子线程"+Thread.currentThread().getName()+"写数据"+myStack.push(count));
                count++;
                if(count==3 || count==5){
                    myStack.notify();
                }
            }

        }
    }
}
